package cn.zyjblogs.nio;

import java.io.IOException;
import java.io.RandomAccessFile;
import java.nio.MappedByteBuffer;
import java.nio.channels.FileChannel;


/**
 * 1. MappedByteBuffer可以让文件直接在内存（堆外内存）中修改，操作系统不需要拷贝
 */
public class MappedByteBufferTest {
    public static void main(String[] args) {
        try (RandomAccessFile randomAccessFile = new RandomAccessFile("2.txt", "rw")) {
            //获取对应通道
            FileChannel channel = randomAccessFile.getChannel();
            /**
             * 参数1： FileChannel.MapMode.READ_WRITE 使用读写
             * 参数2： 0 可以直接修改的起始位置
             * 参数3： 5 使映射到内存的大小，即将1.txt的多个字节映射到内存
             * 可以直接修改的范围只0-5  （使内存的大小不是索引位置）
             * 实际类型 DirectByteBuffer
             */
            MappedByteBuffer mappedByteBuffer = channel.map(FileChannel.MapMode.READ_WRITE, 0, 5);
            mappedByteBuffer.put(0, (byte) 'H');
            mappedByteBuffer.put(3, (byte) '9');
            System.out.println("修改成功~~~");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
